๋ชจ๋์ฑ, ์์กด์ฑ ๊ด๋ฆฌ, ๊ฐ์ ๋ ์ฝ๋ ๊ตฌ์ฑ์ ์ํ CSS @use์ ๊ฐ๋ ฅํจ์ ํ์ํด ๋ณด์ธ์. ๋ชจ๋ฒ ์ฌ๋ก, ๊ณ ๊ธ ๊ธฐ์ ๋ฐ ์ค์ ์ ์ฉ ์ฌ๋ก๋ฅผ ๋ฐฐ์๋ณด์ธ์.
CSS @use ๋ง์คํฐํ๊ธฐ: ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ์ํ ํ๋์ ์ธ ์ ๊ทผ ๋ฐฉ์
๋์์์ด ์งํํ๋ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ๊นจ๋ํ๊ณ , ์ฒด๊ณ์ ์ด๋ฉฐ, ํ์ฅ ๊ฐ๋ฅํ CSS๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ํ๋ก์ ํธ๊ฐ ๋ณต์กํด์ง์ ๋ฐ๋ผ CSS ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ์ ํต์ ์ธ ๋ฐฉ๋ฒ์ ๋ฒ๊ฑฐ๋ก์์ง๊ณ ์ถฉ๋์ด ๋ฐ์ํ๊ธฐ ์ฌ์์ง๋๋ค. CSS ๋ชจ๋ ๋ ๋ฒจ 1์ ๋์
๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ธ @use๋ ์คํ์ผ์ํธ ๋ด์์ ์์กด์ฑ ์ ์ธ๊ณผ ๋ชจ๋ํ๋ฅผ ์ํ ํ๋์ ์ธ ํด๊ฒฐ์ฑ
์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธ์์๋ @use๋ฅผ ์ดํดํ๊ณ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๊ธฐ ์ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํ์ฌ, ๋ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ณ ํจ์จ์ ์ธ CSS ์ํคํ
์ฒ๋ฅผ ๊ตฌ์ถํ ์ ์๋๋ก ๋์ต๋๋ค.
CSS @use๋ ๋ฌด์์ธ๊ฐ?
@use๋ ๋ค๋ฅธ ์คํ์ผ์ํธ์์ CSS ๊ท์น, ๋ณ์, ๋ฏน์ค์ธ, ํจ์๋ฅผ ๊ฐ์ ธ์ ํฌํจํ ์ ์๊ฒ ํด์ฃผ๋ CSS at-rule์
๋๋ค. ์ ํต์ ์ธ @import์ ๋ฌ๋ฆฌ, @use๋ ๊ฐ์ ธ์จ ์คํ์ผ์ ๋ํ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ์ฌ ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ๋ ๋์ ์ฝ๋ ๊ตฌ์ฑ์ ์ด์งํฉ๋๋ค. ๋ํ ๊ฐ์ ธ์จ ๋ชจ๋์์ ๋ฌด์์ ๋
ธ์ถํ ์ง์ ๋ํด ๋ ๋ง์ ์ ์ด๊ถ์ ์ ๊ณตํฉ๋๋ค.
@use๋ฅผ ๊ฐ๊ธฐ ์์ฒด ๋ชจ๋ ๋ด์ ์บก์ํ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ CSS ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋์ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๋ฐ์ ๋จ์ํํ๊ณ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํค๋ฉฐ, ์๊ธฐ์น ์์ ์คํ์ผ ์ถฉ๋์ ์ํ์ ์ค์ฌ์ค๋๋ค.
@import ๋์ @use๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋?
@import๋ ์๋
๊ฐ CSS์ ์ฃผ์ ๊ธฐ๋ฅ์ด์์ง๋ง, @use๊ฐ ํด๊ฒฐํ๋ ๋ช ๊ฐ์ง ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค:
- ์ ์ญ ์ค์ฝํ:
@import๋ ์คํ์ผ์ ์ ์ญ ์ค์ฝํ์ ์ง์ ์ฃผ์ ํ์ฌ ์ด๋ฆ ์ถฉ๋์ ์ํ์ ๋์ด๊ณ ์คํ์ผ์ ์ถ์ฒ๋ฅผ ์ถ์ ํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. - ์ฑ๋ฅ ๋ฌธ์ :
@import๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ๋ฌ ์คํ์ผ์ํธ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋ค์ด๋ก๋ํ๋๋ก ๊ฐ์ ํ์ฌ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. - ๋ค์์คํ์ด์ค ๋ถ์ฌ:
@import๋ ๋ค์์คํ์ด์ค๋ฅผ ์ํ ๋ด์ฅ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ง ์์ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ๋ ์ ์ฌ์ ์ธ ์ถฉ๋์ ์ผ๊ธฐํฉ๋๋ค.
@use๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฌํ ํ๊ณ๋ฅผ ๊ทน๋ณตํฉ๋๋ค:
- ๋ค์์คํ์ด์ค ์์ฑ:
@use๋ ๊ฐ์ ธ์จ ์คํ์ผ์ ๋ค์์คํ์ด์ค ๋ด์ ์บก์ํํ์ฌ ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ์ฝ๋์ ๋ช ํ์ฑ์ ํฅ์์ํต๋๋ค. - ์ฑ๋ฅ ๊ฐ์ : ๋ค๋ฅธ ์ต์ CSS ๊ธฐ์ (์: HTTP/2 ํธ์)๋งํผ ๊ทน์ ์ธ ์ฑ๋ฅ ํฅ์์ ์๋์ง๋ง,
@use๋ ๋ ๋์ ๊ตฌ์ฑ์ ์ฅ๋ คํ์ฌ ๊ฐ์ ์ ์ผ๋ก ๋ ํจ์จ์ ์ธ ์คํ์ผ์ํธ๋ก ์ด์ด์ง๋๋ค. - ๋
ธ์ถ ์ ์ด:
@use๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ์, ๋ฏน์ค์ธ, ํจ์๋ฅผ ์ ํ์ ์ผ๋ก ๋ ธ์ถํ ์ ์์ด ๋ค๋ฅธ ๋ชจ๋์์ ์ฌ์ฉํ ์ ์๋ ํญ๋ชฉ์ ๋ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
@use์ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ
@use at-rule์ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ๊ฐ๋จํฉ๋๋ค:
@use 'path/to/stylesheet';
์ด ์ฝ๋๋ path/to/stylesheet์ ์์นํ ์คํ์ผ์ํธ๋ฅผ ๊ฐ์ ธ์ค๊ณ ํ์ผ ์ด๋ฆ(ํ์ฅ์ ์ ์ธ)์ ๊ธฐ๋ฐ์ผ๋ก ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์คํ์ผ์ํธ ์ด๋ฆ์ด _variables.scss์ด๋ฉด ๋ค์์คํ์ด์ค๋ variables๊ฐ ๋ฉ๋๋ค.
๊ฐ์ ธ์จ ๋ชจ๋์ ๋ณ์, ๋ฏน์ค์ธ ๋๋ ํจ์์ ์ ๊ทผํ๋ ค๋ฉด ๋ค์์คํ์ด์ค ๋ค์์ ์ (.)๊ณผ ํญ๋ชฉ์ ์ด๋ฆ์ ์ฌ์ฉํฉ๋๋ค:
.element {
color: variables.$primary-color;
@include variables.responsive(tablet) {
font-size: 1.2rem;
}
}
๋ค์์คํ์ด์ค์ ๋ณ์นญ(Aliasing)
@use์ ์ฃผ์ ์ฅ์ ์ค ํ๋๋ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์์คํ์ด์ค๋ ํ์ผ ์ด๋ฆ์์ ํ์๋ฉ๋๋ค. ํ์ง๋ง as ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค:
@use 'path/to/stylesheet' as custom-namespace;
์ด์ custom-namespace๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์จ ํญ๋ชฉ์ ์ ๊ทผํ ์ ์์ต๋๋ค:
.element {
color: custom-namespace.$primary-color;
}
๋ํ as *๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค ์์ด ๋ชจ๋ ํญ๋ชฉ์ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ, ์ด๋ @import์ ๋์์ ํจ๊ณผ์ ์ผ๋ก ๋ชจ๋ฐฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋ค์์คํ์ด์ค์ ์ด์ ์ ๋ฌดํจํํ๊ณ ์ด๋ฆ ์ถฉ๋์ ์ผ์ผํฌ ์ ์์ผ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋์ง ์์ต๋๋ค.
@use 'path/to/stylesheet' as *; // ๊ถ์ฅํ์ง ์์
@use๋ฅผ ์ด์ฉํ ๊ตฌ์ฑ
@use๋ with ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์จ ๋ชจ๋์ ๋ณ์๋ฅผ ๊ตฌ์ฑํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ํ
๋ง๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๋ฐ ํนํ ์ ์ฉํฉ๋๋ค.
๋จผ์ , ๊ฐ์ ธ์ฌ ๋ชจ๋์์ !default ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค:
/* _variables.scss */
$primary-color: #007bff !default;
$secondary-color: #6c757d !default;
๊ทธ๋ฐ ๋ค์, ๋ชจ๋์ ์ฌ์ฉํ ๋ ์ด ๋ณ์๋ค์ ๊ตฌ์ฑํฉ๋๋ค:
@use 'variables' with (
$primary-color: #ff0000,
$secondary-color: #00ff00
);
์ด์ variables ๋ชจ๋์ ๊ธฐ๋ณธ ์์์ผ๋ก #ff0000์, ๋ณด์กฐ ์์์ผ๋ก #00ff00์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์๋ณธ ๋ชจ๋์ ์์ ํ์ง ์๊ณ ๋ ์ปดํฌ๋ํธ์ ๋ชจ์์ ์ฝ๊ฒ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค.
@use๋ฅผ ์ด์ฉํ ๊ณ ๊ธ ๊ธฐ์
์กฐ๊ฑด๋ถ ๊ฐ์ ธ์ค๊ธฐ
@use๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ ๋ค๋ฅธ ์กฐ๊ฑด์ ๊ธฐ๋ฐํ ์กฐ๊ฑด๋ถ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ง์ ์ง์ํ์ง๋ ์์ง๋ง, CSS ๋ณ์์ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ฌ ํ
๋ง๋ ์ฅ์น ์ ํ์ ๋ํ๋ด๋ CSS ๋ณ์๋ฅผ ์ ์ํ ๋ค์ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ @use๋ก ์ ์ ํ ์คํ์ผ์ํธ๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ ์ ์์ต๋๋ค.
๋ฏน์ค์ธ๊ณผ ํจ์
@use๋ ๋ฏน์ค์ธ ๋ฐ ํจ์์ ๊ฒฐํฉํ ๋ ํนํ ๊ฐ๋ ฅํฉ๋๋ค. ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฏน์ค์ธ๊ณผ ํจ์๋ฅผ ๋ณ๋์ ๋ชจ๋๋ก ๋ง๋ ๋ค์ @use๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ด๋ ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ด์งํ๊ณ ์ค๋ณต์ ์ค์
๋๋ค.
์๋ฅผ ๋ค์ด, ๋ฐ์ํ ํ์ดํฌ๊ทธ๋ํผ๋ฅผ ์ํ ๋ฏน์ค์ธ์ ๋ง๋ค ์ ์์ต๋๋ค:
/* _typography.scss */
@mixin responsive-font-size($min-size, $max-size, $min-width, $max-width) {
font-size: calc(
#{$min-size} + (#{$max-size} - #{$min-size}) * ((100vw - #{$min-width}) / (#{$max-width} - #{$min-width}))
);
}
๊ทธ๋ฐ ๋ค์, ์ด ๋ฏน์ค์ธ์ ์ปดํฌ๋ํธ๋ก ๊ฐ์ ธ์ ์ฌ์ฉํฉ๋๋ค:
/* _component.scss */
@use 'typography';
.title {
@include typography.responsive-font-size(1.2rem, 2.4rem, 768px, 1200px);
}
CSS ๋ณ์์ ํ ๋ง
@use๋ CSS ๋ณ์์ ์ํํ๊ฒ ์๋ํ์ฌ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ํ
๋ง์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ค๋๋ค. CSS ๋ณ์๋ฅผ ๋ณ๋์ ๋ชจ๋์ ์ ์ํ ๋ค์ @use๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ค๋ฅธ ํ
๋ง ๊ฐ์ ์ฝ๊ฒ ์ ํํ๊ฑฐ๋ ์ฌ์ฉ์ ๊ธฐ๋ณธ ์ค์ ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ์ ๋ชจ์์ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค.
@use ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
- ์คํ์ผ์ํธ ์ ๋ฆฌํ๊ธฐ: ๊ธฐ๋ฅ์ด๋ ์ปดํฌ๋ํธ ์ ํ์ ๋ฐ๋ผ CSS๋ฅผ ๋ ผ๋ฆฌ์ ์ธ ๋ชจ๋๋ก ๋๋๋๋ค.
- ์๋ฏธ ์๋ ๋ค์์คํ์ด์ค ์ฌ์ฉํ๊ธฐ: ๋ชจ๋์ ๋ชฉ์ ์ ์ ํํ๊ฒ ๋ฐ์ํ๋ ๋ค์์คํ์ด์ค๋ฅผ ์ ํํฉ๋๋ค.
with๋ก ๋ณ์ ๊ตฌ์ฑํ๊ธฐ:withํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ ๊ตฌ์ฑํ๊ณ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ญ๋๋ค.as *ํผํ๊ธฐ:as *๋ ๋ค์์คํ์ด์ค์ ์ด์ ์ ๋ฌดํจํํ๊ณ ์ด๋ฆ ์ถฉ๋์ ์ผ์ผํฌ ์ ์์ผ๋ฏ๋ก ์ฌ์ฉ์ ํผํฉ๋๋ค.- ๋ชจ๋ ๋ฌธ์ํํ๊ธฐ: ๊ฐ ๋ณ์, ๋ฏน์ค์ธ, ํจ์์ ๋ชฉ์ ์ ์ค๋ช ํ์ฌ ๋ชจ๋์ ๋ช ํํ๊ฒ ๋ฌธ์ํํฉ๋๋ค.
- ์ฝ๋ ํ ์คํธํ๊ธฐ: ๋ชจ๋์ด ์์๋๋ก ์๋ํ๊ณ ์ด๋ฆ ์ถฉ๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ฒ ์ ํ ํ ์คํธํฉ๋๋ค.
์ค์ ์์
์์ 1: ์ ์ญ ์คํ์ผ์ํธ
์ ์ญ ์คํ์ผ์ํธ(์: _global.scss)๋ ์น์ฌ์ดํธ ์ ์ฒด์์ ์ฌ์ฉ๋๋ ์ ์ญ ๋ณ์์ ์คํ์ผ์ ํฌํจํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ ์ฒด์ ์ธ ์์ ๊ตฌ์ฑ, ๊ธ๊ผด, ๊ฐ๊ฒฉ ๊ท์น ๋ฑ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
/* _global.scss */
$primary-color: #29ABE2;
$secondary-color: #F2F2F2;
$font-family: 'Arial', sans-serif;
body {
font-family: $font-family;
background-color: $secondary-color;
color: $primary-color;
}
๊ทธ๋ฐ ๋ค์, ๋ค๋ฅธ ์คํ์ผ์ํธ์์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค:
@use 'global';
.header {
background-color: global.$primary-color;
color: white;
}
์์ 2: ๋ฒํผ ์ปดํฌ๋ํธ
๊ธฐ๋ณธ ๋ฐ ๋ณด์กฐ ๋ฒํผ๊ณผ ๊ฐ์ ๋ณํ์ ํฌํจํ์ฌ ๋ฒํผ ์ปดํฌ๋ํธ ์คํ์ผ๋ง์ ์ํ ํน์ ๋ชจ๋(์: _buttons.scss)์ ๋ง๋ญ๋๋ค.
/* _buttons.scss */
$base-button-padding: 10px 20px;
$base-button-font-size: 16px;
@mixin base-button-style {
padding: $base-button-padding;
font-size: $base-button-font-size;
border: none;
cursor: pointer;
}
.button-primary {
@include base-button-style;
background-color: blue;
color: white;
}
.button-secondary {
@include base-button-style;
background-color: gray;
color: white;
}
์ด ๋ฒํผ ๋ชจ๋์ ๋ค๋ฅธ ์คํ์ผ์ํธ์์ ์ฌ์ฉํฉ๋๋ค:
@use 'buttons';
.submit-button {
@extend .buttons.button-primary; /* ๊ธฐ๋ณธ ํด๋์ค ์คํ์ผ ํ์ฅ */
margin-top: 10px;
}
์์ 3: ํผ ์คํ์ผ๋ง
ํผ ๊ด๋ จ ์คํ์ผ๋ง ๋ชจ๋(์: _forms.scss)์ ๋ง๋ญ๋๋ค.
/* _forms.scss */
$input-border-color: #ccc;
$input-focus-color: #66afe9;
input[type="text"], input[type="email"], textarea {
padding: 8px;
margin-bottom: 10px;
border: 1px solid $input-border-color;
border-radius: 4px;
&:focus {
border-color: $input-focus-color;
outline: none;
}
}
๊ทธ๋ฐ ๋ค์, ์ฌ์ฉํฉ๋๋ค:
@use 'forms';
.contact-form {
width: 50%;
margin: 0 auto;
input[type="submit"] {
background-color: green;
color: white;
padding: 10px 15px;
border: none;
border-radius: 4px;
cursor: pointer;
}
}
@import์์ @use๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต
๊ธฐ์กด ํ๋ก์ ํธ์์ @import์์ @use๋ก ์ ํํ๋ ๊ฒ์ ์ ์ง์ ์ธ ๊ณผ์ ์ด ๋ ์ ์์ต๋๋ค. ๋ค์์ ์ ์๋ ๋ง์ด๊ทธ๋ ์ด์
์ ๋ต์
๋๋ค:
- ์ ์ญ ์คํ์ผ ์๋ณ: ์ฌ๋ฌ ๊ณณ์์ ๊ฐ์ ธ์ค๋ ์ ์ญ ์คํ์ผ์ํธ๋ฅผ ์๋ณํ๋ ๊ฒ๋ถํฐ ์์ํ์ธ์. ์ด๊ฒ๋ค์ด ์ด๊ธฐ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ข์ ๋์์ ๋๋ค.
@import๋ฅผ@use๋ก ๊ต์ฒด:@import๊ตฌ๋ฌธ์@use๋ก ๋ฐ๊พธ๊ณ , ๊ฐ์ ธ์จ ์คํ์ผ์ ๋ํ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค.- ์ฐธ์กฐ ์ ๋ฐ์ดํธ: ๊ฐ์ ธ์จ ์คํ์ผ์ ๋ํ ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์๋ก์ด ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
- ์ด๋ฆ ์ถฉ๋ ํด๊ฒฐ: ๋ค์์คํ์ด์ค ๋์ ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ชจ๋ ์ด๋ฆ ์ถฉ๋์ ํด๊ฒฐํฉ๋๋ค.
- ์ฒ ์ ํ ํ ์คํธ: ๋ง์ด๊ทธ๋ ์ด์ ์ผ๋ก ์ธํด ํ๊ท(regression)๊ฐ ๋ฐ์ํ์ง ์์๋์ง ํ์ธํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ฒ ์ ํ ํ ์คํธํฉ๋๋ค.
- ์ ์ง์ ๋ฆฌํฉํ ๋ง: ์ฝ๋๋ฅผ ๊ณ์ ๋ฆฌํฉํ ๋งํ์ฌ ์ ์ฐจ ๋ ๋ง์ ์คํ์ผ์ํธ๋ฅผ
@use๋ฅผ ์ฌ์ฉํ๋๋ก ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค.
CSS @forward: ๋ชจ๋ ๋ ธ์ถํ๊ธฐ
@use์ ํจ๊ป, @forward๋ CSS ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ๋ ๋ค๋ฅธ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. @forward at-rule์ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ๋ชจ๋์ ๋ณ์, ๋ฏน์ค์ธ, ํจ์๋ฅผ ํ์ฌ ๋ชจ๋๋ก ์ง์ ๊ฐ์ ธ์ค์ง ์๊ณ ๋ ๋
ธ์ถํ ์ ์์ต๋๋ค. ์ด๋ ๋ชจ๋์ ๋ํ ๊ณต๊ฐ API๋ฅผ ๋ง๋๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค๋ฅธ ๋ชจ๋์ ๋ชจ๋ ๋ณ์, ๋ฏน์ค์ธ, ํจ์๋ฅผ ์ ๋ฌํ๋ index.scss ํ์ผ์ ๋ง๋ค ์ ์์ต๋๋ค:
/* index.scss */
@forward 'variables';
@forward 'mixins';
์ด์ index.scss ํ์ผ์ ์ปดํฌ๋ํธ๋ก ๊ฐ์ ธ์ ์ ๋ฌ๋ ๋ชจ๋์ ๋ชจ๋ ๋ณ์, ๋ฏน์ค์ธ, ํจ์์ ์ ๊ทผํ ์ ์์ต๋๋ค:
@use 'index';
.element {
color: index.$primary-color;
@include index.responsive(tablet) {
font-size: 1.2rem;
}
}
@forward๋ hide์ show ํค์๋์ ํจ๊ป ์ฌ์ฉํ์ฌ ์ ๋ฌ๋ ๋ชจ๋์ ํญ๋ชฉ์ ์ ํ์ ์ผ๋ก ๋
ธ์ถํ ์๋ ์์ต๋๋ค:
/* index.scss */
@forward 'variables' hide $private-variable;
@forward 'mixins' show responsive;
์ด ์์ ์์ $private-variable์ variables ๋ชจ๋์์ ๋
ธ์ถ๋์ง ์์ผ๋ฉฐ, mixins ๋ชจ๋์์๋ responsive ๋ฏน์ค์ธ๋ง ๋
ธ์ถ๋ฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์ง์ ๋ฐ ํด๋ฆฌํ(Polyfills)
@use๋ CSS ๋ชจ๋ ๋ ๋ฒจ 1์ ์ง์ํ๋ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ์ง์ํ์ง ์์ ์ ์์ต๋๋ค. ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ํธํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด Sass๋ Less์ ๊ฐ์ CSS ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ @use ๊ตฌ๋ฌธ์ ํธํ๋๋ CSS ์ฝ๋๋ก ์๋์ผ๋ก ๋ณํํฉ๋๋ค.
CSS ์์กด์ฑ ๊ด๋ฆฌ์ ๋ฏธ๋
@use๋ CSS ์์กด์ฑ ๊ด๋ฆฌ์์ ์ค์ํ ์ง์ ์ ๋ํ๋
๋๋ค. ๋ค์์คํ์ด์ค, ๋
ธ์ถ ์ ์ด, ํฅ์๋ ๊ตฌ์ฑ ์ต์
์ ์ ๊ณตํจ์ผ๋ก์จ @use๋ ๊ฐ๋ฐ์๊ฐ ๋ ๋ชจ๋ํ๋๊ณ , ์ ์ง๋ณด์ ๊ฐ๋ฅํ๋ฉฐ, ํ์ฅ ๊ฐ๋ฅํ CSS ์ํคํ
์ฒ๋ฅผ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. CSS๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์์กด์ฑ ๊ด๋ฆฌ์์ ๋ ๋ง์ ๊ฐ์ ๊ณผ ํ์ ์ ๊ธฐ๋ํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ๊ฒฌ๊ณ ํ๊ณ ํจ์จ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋๋ ๊ฒ์ด ๊ทธ ์ด๋ ๋๋ณด๋ค ์ฌ์์ง ๊ฒ์
๋๋ค.
์ ์ญ์ ๊ณ ๋ ค์ฌํญ ๋ฐ ์ ๊ทผ์ฑ
์ ์ญ์ ์ธ ๋งฅ๋ฝ์์ @use(๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก CSS)๋ฅผ ๊ตฌํํ ๋๋ ์ ๊ทผ์ฑ ๋ฐ ๊ตญ์ ํ(i18n), ํ์งํ(l10n)๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ง์นจ์
๋๋ค:
- ์ธ์ด๋ณ ์คํ์ผ: ๊ธ๊ผด ๋ชจ์ ๋ฐ ๊ธ๊ผด ํฌ๊ธฐ์ ๊ฐ์ ์ธ์ด๋ณ ์คํ์ผ์ ๊ด๋ฆฌํ๊ธฐ ์ํด CSS ๋ณ์๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๋ฅผ ํตํด ์คํ์ผ์ ๋ค๋ฅธ ์ธ์ด ๋ฐ ์คํฌ๋ฆฝํธ์ ์ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค. ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฐ๋ ์ธ์ด(RTL)๋ฅผ ๋ ์ ์ง์ํ๊ธฐ ์ํด ๋
ผ๋ฆฌ์ ์์ฑ ๋ฐ ๊ฐ(์:
margin-left๋์margin-inline-start) ์ฌ์ฉ์ ๊ณ ๋ คํ์ธ์. - ์ ๊ทผ์ฑ: CSS ์คํ์ผ์ด ์ฅ์ ๋ฅผ ๊ฐ์ง ์ฌ์ฉ์์๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ํ์ธ์. ์๋งจํฑ HTML ์์๋ฅผ ์ฌ์ฉํ๊ณ , ์ถฉ๋ถํ ์์ ๋๋น๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์์์๋ง ์์กดํ์ง ๋ง์ธ์. ์คํฌ๋ฆฐ ๋ฆฌ๋์ ๊ฐ์ ๋ณด์กฐ ๊ธฐ์ ๋ก ์น์ฌ์ดํธ๋ฅผ ํ ์คํธํ์ฌ ์ ๊ทผ์ฑ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ์ธ์.
- ๋ฌธํ์ ๊ณ ๋ ค์ฌํญ: ์น์ฌ์ดํธ๋ฅผ ๋์์ธํ ๋ ๋ฌธํ์ ์ฐจ์ด์ ์ ์ํ์ธ์. ํน์ ๋ฌธํ์์ ๊ณต๊ฒฉ์ ์ด๊ฑฐ๋ ๋ถ์ ์ ํ ์ ์๋ ์ด๋ฏธ์ง, ์์ ๋๋ ๊ธฐํธ ์ฌ์ฉ์ ํผํ์ธ์.
- ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํ ๋ฐ์ํ ๋์์ธ: ์น์ฌ์ดํธ๊ฐ ๋ฐ์ํ์ด๋ฉฐ ๋ค๋ฅธ ํ๋ฉด ํฌ๊ธฐ ๋ฐ ์ฅ์น์ ์ ์ํ๋๋ก ํ์ธ์. ํ๋ฉด ํฌ๊ธฐ์ ๋น๋กํ์ฌ ํ์ฅ๋๋ ์ ์ฐํ ๋ ์ด์์์ ์ํด ๋ทฐํฌํธ ๋จ์(vw, vh, vmin, vmax) ์ฌ์ฉ์ ๊ณ ๋ คํ์ธ์.
๊ฒฐ๋ก
@use๋ CSS ์์กด์ฑ์ ๊ด๋ฆฌํ๊ณ ๋ชจ๋์์ด๋ฉฐ ์ ์ง๋ณด์ ๊ฐ๋ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ CSS ์ํคํ
์ฒ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. @use์ ์์น์ ์ดํดํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด CSS ์ฝ๋์ ๊ตฌ์ฑ๊ณผ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์์ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๋๊ท๋ชจ ๊ธฐ์
์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๋ , @use๋ ๋ ๋์ CSS๋ฅผ ๋ง๋ค๊ณ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค.